import { NextRequest, NextResponse } from "next/server"; import { getIronSession } from "iron-session"; import { SessionData, sessionOptions } from "@/lib/session"; import { prisma } from "@/lib/prisma"; import { hashPassword, requireAdmin } from "@/lib/auth"; export async function PATCH(request: NextRequest, { params }: { params: { id: string } }) { const response = NextResponse.next(); const session = await getIronSession(request, response, sessionOptions); if (!session.userId || !(await requireAdmin(session.userId))) return NextResponse.json({ error: "Forbidden" }, { status: 403 }); const body = await request.json(); const data: Record = {}; if (body.name !== undefined) data.name = body.name; if (body.username !== undefined) data.username = body.username; if (body.role !== undefined) data.role = body.role; if (body.password) data.passwordHash = await hashPassword(body.password); const user = await prisma.user.update({ where: { id: params.id }, data, select: { id: true, username: true, name: true, role: true }, }); return NextResponse.json(user); } export async function DELETE(request: NextRequest, { params }: { params: { id: string } }) { const response = NextResponse.next(); const session = await getIronSession(request, response, sessionOptions); if (!session.userId || !(await requireAdmin(session.userId))) return NextResponse.json({ error: "Forbidden" }, { status: 403 }); if (params.id === session.userId) return NextResponse.json({ error: "Cannot delete yourself" }, { status: 400 }); await prisma.user.delete({ where: { id: params.id } }); return NextResponse.json({ success: true }); }